CSSãµãã°ãªããã®ãã©ãã¯åœåã®åãæ¢æ±ããä¿å®æ§ãšæè»æ§ã«åªããã¬ã€ã¢ãŠããäœæããŸããç¶æ¿ã°ãªããã©ã€ã³åãæŽ»çšããŠãè€éã§ã¬ã¹ãã³ã·ããªãã¶ã€ã³ãæ§ç¯ããæ¹æ³ãåŠã³ãŸãããã
CSSãµãã°ãªããã®ãã©ãã¯åœåïŒæè»ãªã¬ã€ã¢ãŠããå®çŸããç¶æ¿ã°ãªããã©ã€ã³ã®èå¥
CSS Gridã¯Webã¬ã€ã¢ãŠãã«é©åœããããããæ¯é¡ã®ãªãå¶åŸ¡ãšæè»æ§ãæäŸããŸããããµãã°ãªããã¯ãããããã«äžæ©é²ãããã¹ããããã°ãªããã芪ãããã©ãã¯ã®ãµã€ãžã³ã°ãç¶æ¿ã§ããããã«ããŸãããµãã°ãªããã®åŒ·åã§ãããªããèŠéããããã¡ãªæ©èœããã©ãã¯åœåã§ãããµãã°ãªããåºæã®ç¶æ¿ãšçµã¿åãããããšã§ãè€éãªã¬ã€ã¢ãŠããšä¿å®æ§ã®é«ãã³ãŒãã«å¯Ÿãããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
CSS Gridãšãµãã°ãªããã®çè§£
ãã©ãã¯åœåã«é£ã³èŸŒãåã«ãCSS Gridãšãµãã°ãªããã®åºæ¬ãç°¡åã«æ¯ãè¿ããŸãããã
CSS Grid
CSS Grid Layoutã¯ãWebã®ããã®2次å ã¬ã€ã¢ãŠãã·ã¹ãã ã§ããã³ã³ãããè¡ãšåã«åå²ãããããã®ã°ãªããã»ã«å ã«ã³ã³ãã³ããé 眮ããããšãã§ããŸããäž»ãªæŠå¿µã¯æ¬¡ã®ãšããã§ãã
- ã°ãªããã³ã³ããïŒ`display: grid` ãŸã㯠`display: inline-grid` ãé©çšãããèŠçŽ ã
- ã°ãªããã¢ã€ãã ïŒã°ãªããã³ã³ããã®çŽæ¥ã®åèŠçŽ ã
- ã°ãªãããã©ãã¯ïŒã°ãªããã®è¡ãšåã
- ã°ãªããã©ã€ã³ïŒã°ãªãããã©ãã¯ãåºåãçªå·ä»ãã®ç·ã
- ã°ãªããã»ã«ïŒã°ãªããå ã®åã ã®é åã
äŸãã°ã次ã®HTMLãèããŠã¿ãŸãããã
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>
ãããŠCSSã§ãã
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
}
ããã«ãããçããå¹ ã®3ã€ã®åãšãããããé«ã100pxã®2ã€ã®è¡ãæã€ã°ãªããã³ã³ãããäœæãããŸãã
CSSãµãã°ãªãã
ãµãã°ãªããã䜿çšãããšãã°ãªããã¢ã€ãã èªäœãã°ãªããã³ã³ããã«ãªãã芪ã°ãªããã®ãã©ãã¯ãµã€ãžã³ã°ãç¶æ¿ã§ããŸããããã¯ããã¹ããããèŠçŽ ãã¡ã€ã³ã°ãªããã«æããå¿ èŠãããäžè²«ããã¬ã€ã¢ãŠããäœæããå Žåã«ç¹ã«äŸ¿å©ã§ãããµãã°ãªãããæå¹ã«ããã«ã¯ããµãã°ãªããã³ã³ããã® `grid-template-columns` ããã³/ãŸã㯠`grid-template-rows` ããããã£ã `subgrid` ã«èšå®ããŸãã
åã®äŸãæ¡åŒµããŠã¿ãŸãããã
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item subgrid-item">
<div class="subgrid-content">Subgrid Content 1</div>
<div class="subgrid-content">Subgrid Content 2</div>
</div>
<div class="grid-item">Item 3</div>
</div>
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
}
.subgrid-item {
display: grid;
grid-column: 2;
grid-row: 2;
grid-template-columns: subgrid;
grid-template-rows: subgrid;
}
.subgrid-content {
/* Styles for content within the subgrid */
}
ããã§ã`.subgrid-item` ã¯èŠªã°ãªããããåãšè¡ã®ãµã€ãºãç¶æ¿ãããã®ã³ã³ãã³ããã·ãŒã ã¬ã¹ã«æŽåãããŸãã
CSS Gridã«ããããã©ãã¯åœå
ãã©ãã¯åœåã¯ãã°ãªããã©ã€ã³ã«æå³ã®ããååãå²ãåœãŠãæ¹æ³ãæäŸããCSSãããèªã¿ããããä¿å®ããããããŸããã°ãªããã©ã€ã³ãæ°å€ã€ã³ããã¯ã¹ã§åç §ãã代ããã«ã説æçãªååã䜿çšã§ããŸããããã«ãããç¹ã«è€éãªã°ãªããã§ã®ã³ãŒãã®æçæ§ãå€§å¹ ã«åäžããŸãã
`grid-template-columns` ãš `grid-template-rows` ããããã£å ã§ãè§æ¬åŒ§ã䜿çšããŠãã©ãã¯åãå®çŸ©ã§ããŸãã
.grid-container {
display: grid;
grid-template-columns: [start] 1fr [content-start] 2fr [content-end] 1fr [end];
grid-template-rows: [header-start] 50px [header-end content-start] auto [content-end footer-start] 30px [footer-end];
}
ãã®äŸã§ã¯ã`start`ã`content-start`ã`content-end`ã`end`ã`header-start`ã`header-end`ã`footer-start`ã`footer-end` ãšããããã€ãã®ã°ãªããã©ã€ã³ã«ååãä»ããŸãããã°ãªããã©ã€ã³ã«ã¯ãã¹ããŒã¹ã§åºåãããè€æ°ã®ååãä»ããããšãã§ããããšã«æ³šæããŠãã ããïŒäŸïŒ`[header-end content-start]`ïŒã
ãã®åŸããããã®ååã䜿çšããŠã`grid-column-start`ã`grid-column-end`ã`grid-row-start`ãããã³ `grid-row-end` ã䜿çšããŠã°ãªããã¢ã€ãã ãé 眮ã§ããŸãã
.grid-item {
grid-column-start: content-start;
grid-column-end: content-end;
grid-row-start: content-start;
grid-row-end: content-end;
}
ãµãã°ãªããã«ããç¶æ¿ã°ãªããã©ã€ã³ã®èå¥
æ¬åœã®åã¯ããã©ãã¯åœåãšãµãã°ãªãããçµã¿åããããšãã«çºæ®ãããŸãããµãã°ãªããã¯èŠªãããã©ãã¯ã®*ãµã€ãº*ãç¶æ¿ããŸãããã°ãªããã©ã€ã³ã®*åå*ãç¶æ¿ããŸããããã«ãããè€æ°ã¬ãã«ã®ãã¹ãã«ããã£ãŠãäžè²«æ§ãšå¯èªæ§ãç¶æãããæ·±ããã¹ããããã¬ã€ã¢ãŠããäœæã§ããŸãã
Webãµã€ãã«ãå šäœçãªã¬ã€ã¢ãŠãïŒããããŒãã³ã³ãã³ããããã¿ãŒïŒãå®çŸ©ããã¡ã€ã³ã°ãªããããããšããŸããã³ã³ãã³ããšãªã¢å ã«ã¯ãèšäºã衚瀺ããããã®ãµãã°ãªããããããŸãããã©ãã¯åœåã䜿çšããããšã§ãèšäºã®ãµãã°ãªãããã¡ã€ã³ã°ãªããã®åæ§é ãšå®å šã«æŽåããããã«ã§ããŸãã
äŸïŒèšäºãµãã°ãªããã䜿çšããWebãµã€ãã¬ã€ã¢ãŠã
ãŸããã¡ã€ã³ã°ãªãããå®çŸ©ããŸãã
<div class="main-grid">
<header class="header">Header</header>
<main class="content">
<article class="article">
<h2 class="article-title">Article Title</h2>
<p class="article-body">Article content goes here...</p>
</article>
</main>
<footer class="footer">Footer</footer>
</div>
.main-grid {
display: grid;
grid-template-columns: [full-start] minmax(20px, 1fr) [content-start] minmax(300px, 8fr) [content-end] minmax(20px, 1fr) [full-end];
grid-template-rows: [header-start] auto [header-end content-start] 1fr [content-end footer-start] auto [footer-end];
grid-template-areas:
"header header header header"
"content content content content"
"footer footer footer footer";
gap: 10px;
}
.header {
grid-area: header;
background-color: #eee;
padding: 10px;
}
.content {
grid-area: content;
background-color: #fff;
padding: 10px;
}
.footer {
grid-area: footer;
grid-column: full-start / full-end; /* Ensure the footer spans the full width */
background-color: #eee;
padding: 10px;
}
次ã«ã`.article` èŠçŽ ããµãã°ãªããã«ããŠãåæ§é ãšååä»ãã°ãªããã©ã€ã³ãç¶æ¿ãããŸãããã
.article {
display: grid;
grid-template-columns: subgrid;
grid-column: content-start / content-end; /* Position article within content area */
background-color: #f9f9f9;
padding: 10px;
}
.article-title {
grid-column: full-start / full-end; /* Spans the entire width of the subgrid */
}
.article-body {
grid-column: content-start / content-end; /* Aligns with the content area of the main grid */
}
ãã®äŸã§ã¯ã`.article` èŠçŽ ã¯ãµãã°ãªããã«ãªãã`.main-grid` ãã `full-start`ã`content-start`ã`content-end`ã`full-end` ãšããååä»ãã°ãªããã©ã€ã³ãç¶æ¿ããŸãã`.article-title` ã¯ãµãã°ãªããã®å šå¹ ã«åºããããã«ã¹ã¿ã€ã«èšå®ããã`.article-body` ã¯ç¶æ¿ãããã°ãªããã©ã€ã³åã®ãããã§ãã¡ã€ã³ã°ãªããã®ã³ã³ãã³ããšãªã¢ã«æŽåããŸãã
ãã©ãã¯åœåãšãµãã°ãªããã䜵çšããã¡ãªãã
- å¯èªæ§ã®åäžïŒèª¬æçãªååãæ°å€ã€ã³ããã¯ã¹ã®ä»£ããã«äœ¿çšããããšã§ãCSSãçè§£ãããããä¿å®ãããããªããŸãã
- ä¿å®æ§ã®åäžïŒã°ãªããæ§é ã倿Žããå¿ èŠãããå Žåã§ãããã©ãã¯åã¯äžè²«ããŠãããããã¬ã€ã¢ãŠãã厩ãããªã¹ã¯ãæžå°ããŸãã
- æè»æ§ã®åäžïŒæ°å€ã€ã³ããã¯ã¹ãåèšç®ããããšãªããã°ãªããã©ã€ã³åã倿Žããã ãã§ã°ãªããã¢ã€ãã ãç°¡åã«åé 眮ã§ããŸãã
- äžè²«ããã¬ã€ã¢ãŠãïŒãã©ãã¯åœåã䌎ããµãã°ãªããã¯ããã¹ããããèŠçŽ ã芪ã°ãªãããšå®å šã«æŽåããããšãä¿èšŒããèŠèŠçã«é åçã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçã¿åºããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
CSSãµãã°ãªããã®ãã©ãã¯åœåãç¹ã«æçãªããã€ãã®å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹ã以äžã«ç€ºããŸãã
- è€éãªãã©ãŒã ïŒã¡ã€ã³ã°ãªãããšåãã©ãŒã ã»ã¯ã·ã§ã³çšã®ãµãã°ãªããã䜿çšããŠãç°ãªãã»ã¯ã·ã§ã³éã§ãã©ãŒã ã©ãã«ãšå ¥åãã£ãŒã«ããæŽåãããŸãã
- ååãªã¹ãïŒåã«ãŒãå ã§ãµãã°ãªããã䜿çšããŠãç»åãã¿ã€ãã«ã説æãæŽåããäžè²«æ§ã®ããååã«ãŒãã¬ã€ã¢ãŠããäœæããŸãã
- ããã·ã¥ããŒãã¬ã€ã¢ãŠãïŒã¡ã€ã³ã°ãªããã®åæ§é ãç¶æ¿ããè€æ°ã®ããã«ãæã€ãæè»ãªããã·ã¥ããŒãã¬ã€ã¢ãŠããæ§ç¯ããŸãã
- éèªé¢šã¬ã€ã¢ãŠãïŒãµãã°ãªãããšãã©ãã¯åœåã䜿çšããŠãç¹éèšäºãšãµã€ãããŒãã·ãŒã ã¬ã¹ã«æŽåããè€éãªéèªé¢šã¬ã€ã¢ãŠãããã¶ã€ã³ããŸãããã·ã§ãã«ãžãªã°ã©ãã£ãã¯ã®ãããªåºçç©ãã©ã®ããã«ã¬ã€ã¢ãŠããæ§æããŠãããèããŠã¿ãŠãã ããã
- Eã³ããŒã¹ååããŒãžïŒAmazonã®ãããªeã³ããŒã¹ãµã€ãã§ãèŠèŠçãªäžè²«æ§ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®éµãšãªãååç»åãã¿ã€ãã«ã説æãäŸ¡æ Œæ å ±ãæ£ç¢ºã«å¶åŸ¡ããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
ãã©ãã¯åœåãš `minmax()` ã®äœ¿çš
ãã©ãã¯åœåã `minmax()` 颿°ãšçµã¿åãããŠãããŸããŸãªç»é¢ãµã€ãºã«é©å¿ããã¬ã¹ãã³ã·ãã°ãªãããäœæããŸããäŸãã°ïŒ
.grid-container {
display: grid;
grid-template-columns: [start] minmax(20px, 1fr) [content-start] minmax(300px, 8fr) [content-end] minmax(20px, 1fr) [end];
}
ããã«ãããã³ã³ãã³ããšãªã¢ã¯åžžã«æäœ300pxã®å¹ ã確ä¿ãã€ã€ãå©çšå¯èœãªã¹ããŒã¹ãåããããã«æ¡åŒµã§ããŸãã
æé»çã°ãªãããšæç€ºçã°ãªããã®æäœ
æé»çã°ãªãããšæç€ºçã°ãªããã®éãã«æ³šæããŠãã ãããæç€ºçã°ãªãã㯠`grid-template-columns` ãš `grid-template-rows` ã䜿çšããŠå®çŸ©ãããŸãããæé»çã°ãªããã¯ã³ã³ãã³ããæç€ºçã°ãªããã®å€ã«é 眮ããããšãã«èªåçã«äœæãããŸãããã©ãã¯åœåã¯äž»ã«æç€ºçã°ãªããã«é©çšãããŸãã
ãã©ãŠã¶ã®äºææ§
ãµãã°ãªããã¯ã¢ãã³ãã©ãŠã¶ã§æ¯èŒçæåããµããŒããããŠããŸãããCan I use...ã®ãããªãªãœãŒã¹ã䜿çšããŠãã©ãŠã¶ã®äºææ§ã確èªããããšã¯åžžã«è¯ãç¿æ £ã§ãããµãã°ãªããããµããŒãããŠããªãå€ããã©ãŠã¶ã®ããã«ããã©ãŒã«ããã¯ãœãªã¥ãŒã·ã§ã³ãæäŸããŠãã ããã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ã°ãªããã¬ã€ã¢ãŠããé害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ãããã»ãã³ãã£ãã¯ãªHTMLã䜿çšããããŠã¹ãä»ã®ãã€ã³ãã£ã³ã°ããã€ã¹ã䜿çšã§ããªããŠãŒã¶ãŒã®ããã«ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããä»£æ¿æ¹æ³ãæäŸããŠãã ãããé©åã«æ§é åãããèŠåºããã©ãã«ãããã³ARIA屿§ã¯ãã¢ã¯ã»ã·ããªãã£ã«ãšã£ãŠéåžžã«éèŠã§ãã
CSSãµãã°ãªããã®ãã©ãã¯åœåã«é¢ãããã¹ããã©ã¯ãã£ã¹
- 説æçãªååã䜿çšããïŒã°ãªããã©ã€ã³ã®ç®çãæç¢ºã«ç€ºãã説æçãªãã©ãã¯åãéžæããŸãã
- äžè²«æ§ãä¿ã€ïŒãããžã§ã¯ãå šäœã§äžè²«ããåœåèŠåã䜿çšããŸãã
- é床ã«è€éãªååãé¿ããïŒãã©ãã¯åã¯ç°¡æœã§èŠãããããã®ã«ããŸãã
- ã°ãªããæ§é ãææžåããïŒCSSã«ã³ã¡ã³ãã远å ããŠãã°ãªããæ§é ãšãã©ãã¯åœåèŠåã説æããŸãã
- 培åºçã«ãã¹ãããïŒç°ãªãããã€ã¹ããã©ãŠã¶ã§ã°ãªããã¬ã€ã¢ãŠãããã¹ãããæåŸ ã©ããã«æ©èœããããšã確èªããŸãã
é¿ããã¹ãããããééã
- çŽããããããŸãã¯ææ§ãªååã䜿çšããïŒäžæçãŸãã¯èª€è§£ãæãå¯èœæ§ã®ããååã®äœ¿çšãé¿ããŸãã
- äžè²«æ§ã®ãªãåœåèŠåïŒãããžã§ã¯ãå šäœã§äžè²«ããåœåèŠåãéµå®ããŸãã
- ãã©ãã¯åã®å®çŸ©ãå¿ããïŒãã¹ãŠã®é¢é£ããã°ãªããã©ã€ã³ã«ãã©ãã¯åãå®çŸ©ããããšãå¿ããªãã§ãã ããã
- ç°ãªããã©ãŠã¶ã§ãã¹ãããªãïŒäºææ§ã確ä¿ããããã«ãåžžã«ç°ãªããã©ãŠã¶ã§ã°ãªããã¬ã€ã¢ãŠãããã¹ãããŸãã
- ãµãã°ãªããã®ä¹±çšïŒãµãã°ãªããã¯åŒ·åã§ãããåžžã«æåã®è§£æ±ºçãšã¯éããŸãããããã·ã³ãã«ãªã¬ã€ã¢ãŠãã¢ãããŒããé©åãã©ãããæ€èšããŠãã ããã
çµè«
CSSãµãã°ãªããã®ãã©ãã¯åœåã¯ãããä¿å®ãããããæè»ã§ãäžè²«æ§ã®ããã¬ã€ã¢ãŠããäœæããããã®åŒ·åãªãã¯ããã¯ã§ããç¶æ¿ãããã°ãªããã©ã€ã³åãå©çšããããšã§ãçè§£ãããã倿Žã容æãªè€éãªãã¹ããããã°ãªãããæ§ç¯ã§ããŸããCSS Gridã®ã¯ãŒã¯ãããŒã«ãã©ãã¯åœåãåãå ¥ããŠãæ°ããªå¯èœæ§ãè§£ãæŸã¡ãçŽ æŽãããWebãã¶ã€ã³ãäœæããŸããããããŸããŸãªã¬ã€ã¢ãŠãããã©ãã¯åãã¬ã¹ãã³ã·ããã¯ããã¯ã詊ããŠããã®è²Žéãªã¹ãã«ãç¿åŸããŠãã ãããã·ã³ãã«ãªããã°ãæ§ç¯ããŠããå Žåã§ããè€éãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããå Žåã§ãããµãã°ãªããã®ãã©ãã¯åœåã¯ãèŠèŠçã«é åçã§æ©èœçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ãªèŠç¹ãåãå ¥ããã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšã§ãCSS Gridã¬ã€ã¢ãŠãããã¹ãŠã®èæ¯ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠå æ¬çã§ã¢ã¯ã»ã¹å¯èœã§ããããšãä¿èšŒã§ããŸãã